package zuochengyun.class2;

import jdk.dynalink.beans.StaticClass;

public class ClassTwo {
    public static void main(String[] args) {
        int timeCount = 100000;
        int count = 0;
        double X = 0.7;
        for (int i = 0; i < timeCount; i++) {
            if (xToXPower2() < X) {
                count++;
            }
        }
        System.out.println(Math.pow(X, 2));
        System.out.println((double) count / (double) timeCount);
        System.out.println("======================");

        int counts[] = new int[8];
        for (int i = 0; i < timeCount; i++) {
            int ans = f1();
            counts[ans - 1]++;
        }
        print(counts);
        counts = new int[8];
        for (int i = 0; i < timeCount; i++) {
            int ans = f4();
            counts[ans]++;
        }
        print(counts);


    }

    public static void print(int arr[]) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(i + " 这个数，出现了 " + arr[i] + "次");
        }
    }


    //x的生成概率变成X的平方
    public static double xToXPower2() {
        return Math.min(Math.random(), Math.random());

    }

    //问题1.========================================
    //有一个函数 f1 可以生成1~5的等概率事件 不可以用Math.random方法只用f1方法做到0~6的等概率时间\

    //f1函数 等概率生成1~5之间的数字
    public static int f1() {
        return (int) (Math.random() * 5) + 1;
    }

    //f2函数 生成0 1 两个数的等概率函数 为之后的过程做铺垫
    public static int f2() {
        int ans = 0;
        do {
            ans = f1();
        } while (ans == 3);
        return ans < 3 ? 0 : 1;
    }

    //f3 函数  做笔记用左神笔记即可  通过 2进制  000 ~ 111 来代表 0~7
    public static int f3() {
        //通过左移2进制相加
        return (f2() << 2) + (f2() << 1) + (f2() << 0);
    }

    //f4 对f3函数改装  是7的概率就分给0~6
    public static int f4() {
        int ans = 0;
        do {
            ans = f3();
        } while (ans == 7);
        return ans;
    }
}
